
var observerCache = new WeakMap()
function observeChanges(target, callback, options = {}) {
  // 合并默认选项
  const opts = {
    childList: true,//是否监测目标元素的​​子节点​​变化（新增、删除或移动子节点）
    attributes: false,//是否监测目标元素的​​属性值​​变化（如 class、style、data-* 等）  鼠标移入等事件也会触发
    subtree: true,//是否监测目标元素的​​所有后代节点​​（而不仅是直接子节点）
    throttle: 1000,//回调函数的​​节流时间​​（单位：毫秒），避免短时间内频繁触发
    first: true,//是否在观察开始时立即执行一次回调函数
    ...options
  };

  // 获取目标元素
  const element = typeof target === 'string' 
    ? document.querySelector(target) 
    : target;
  
  if (!element) {
    console.warn('Observer: 目标元素未找到');
    return null;
  }
  if(opts.first)callback()
  if(observerCache.has(element)){
    return observerCache.get(element)
  }
  // 节流函数
  let lastTime = 0;
  const throttledCallback = (mutations) => {
    const now = Date.now();
    if (now - lastTime >= opts.throttle) {
      callback(mutations);
      lastTime = now;
    }
  };
 
  // 创建并启动观察者
  const observer = new MutationObserver(throttledCallback);
  observer.observe(element, {
    childList: opts.childList,
    attributes: opts.attributes,
    subtree: opts.subtree
  });
  observerCache.set(element,observer)
  return observer;
}